Skip to content

[Feat] Give Fast mode deployment MCP access - #1604

Merged
mrubens merged 9 commits into
developfrom
feature/fast-custom-automations-2co2bhdlw4oce
Aug 24, 2026
Merged

[Feat] Give Fast mode deployment MCP access#1604
mrubens merged 9 commits into
developfrom
feature/fast-custom-automations-2co2bhdlw4oce

Conversation

@roomote-roomote

@roomote-roomote roomote-roomote Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

​Opened on behalf of @mrubens. Follow up by mentioning @roomote-roomote or in the web UI.

What changed

  • Gave Fast mode the same actor-resolved remote and deployment-proxied MCP server set used by delegated tasks, including user-scoped integrations, custom remote servers, Brain, and the API-hosted Roomote MCP. Local stdio servers remain sandbox-only.
  • Routed those servers through Fast's existing audited MCP client broker with per-user tool catalog isolation, deployment-disabled tool filtering, reverse-proxy path support, short-lived user tokens for deployment proxies, and contained actor-specific credentials for direct upstream servers.
  • Moved the canonical manage_custom_automations contract into @roomote/types, registered it on the worker and API-hosted Roomote MCP servers, and removed the duplicated Fast-native automation schema and adapter.
  • Kept custom automation authorization and domain behavior in the existing API router. Parent Fast turns can manage automations without a prior acknowledgement, identical calls are deduplicated per turn, and advisor/judge subagents remain blocked from destructive automation management.
  • Updated Fast prompt guidance and added focused resolver, broker, authorization, cache, proxy, deduplication, and subagent-boundary coverage.

Why this change was made

Fast mode previously exposed a hand-built subset of deployment integrations and needed a separate native tool to manage custom automations. Reusing the task MCP resolver and canonical Roomote MCP contract gives Fast the configured deployment tool surface without duplicating schemas, authorization, or persistence logic.

Impact

Fast conversations can use deployment-configured remote MCP servers with the same acting-user and deployment semantics as tasks. Deployment administrators can manage custom automations through the Roomote MCP, while non-admin users, disabled tools, local stdio servers, and destructive subagent calls remain denied by their existing boundaries.

@roomote-community

roomote-community Bot commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

No code issues found. See task

  • Prevent duplicate Fast automation mutations in one turn (packages/cloud-agents/src/server/fast-agent/fast-agent-service.ts:1083).
  • Keep destructive custom automation management parent-only in Fast mode (packages/cloud-agents/src/server/fast-agent/fast-agent-service.ts:950).
  • Keep user-scoped MCP integrations available to their Fast user (packages/sdk/src/server/routers/mcp-connections.ts:163).

Reviewed a2748ad

Comment thread packages/cloud-agents/src/server/fast-agent/fast-agent-service.ts Outdated
Comment thread packages/cloud-agents/src/server/fast-agent/fast-agent-service.ts Outdated
@roomote-roomote roomote-roomote Bot changed the title [Feat] Let Fast mode manage custom automations [Feat] Give Fast mode deployment MCP access Aug 24, 2026
@roomote-roomote

Copy link
Copy Markdown
Contributor Author

Matt Rubens: Still going?

Implemented the expanded Fast MCP architecture and pushed it in 3b8a77a.

Fast now receives the actor-resolved remote MCP server set used by tasks, custom automations come through the canonical Roomote MCP contract, parent automation mutations require no acknowledgement, duplicate calls are fenced per turn, and destructive automation management remains unavailable to advisor/judge subagents. The addressed review threads are resolved and the PR metadata is refreshed.

- Exclude user-scoped curated integrations from Fast config resolution;
  their API proxies reject control-plane auth tokens, so they failed
  discovery on every turn.
- Re-mint the broker auth token at integration call time for
  deployment-proxy endpoints instead of reusing the short-lived
  list-time token, which expired mid-turn on long turns.
- Pass a consistent apiBaseUrl through parent-event Fast turns so the
  broker's origin check keeps injecting proxy auth on split-origin
  deployments.
- Add an onError handler and safe JSON parsing to the in-process
  custom-automations app so router failures surface as structured tool
  errors, and keep the numeric HTTP status from being clobbered by a
  response body's own status field.
- Return early from integration listing when no MCP servers or GitHub
  installation exist, restoring the pre-existing quiet no-op path.
- Warn when a Fast surface provides no MCP config resolver instead of
  silently serving zero deployment servers.
- Prune expired per-user entries from the integration tool cache.
- Silence the per-connection config-resolution info logging on the
  per-turn Fast path.
- Document Fast-mode automation management and MCP server access.
Comment thread packages/sdk/src/server/routers/mcp-connections.ts Outdated
- Extract buildManageCustomAutomationsRequest into @roomote/types so the
  worker MCP server and the API-hosted tool map actions onto the
  custom-automations REST routes from one source instead of two
  hand-kept switches (which had already drifted on body filtering).
- Extract a shared in-process API invocation helper for MCP tool
  handlers; the member tools and custom-automations tool now share the
  auth-impersonation app, onError handler, safe JSON parsing, and
  status-preserving error shape (member tools previously lacked the
  error handler and let response bodies clobber the HTTP status).
- Add ROOMOTE_MCP_ID and MCP proxy path-prefix constants to
  @roomote/types and use them at every producer and consumer, so the
  security-relevant 'roomote' gating and deployment-proxy detection
  cannot silently diverge from the URLs being built.
- Collapse createRoomoteMcpServer's two identical auth params into one
  plus a boolean.
- Route Discord and parent-event Fast surfaces through the canonical
  resolveApiBaseUrl fallback chain instead of inline env fallbacks.
The Discord handlers and fast-agent parent event now import
resolveApiBaseUrl from @roomote/cloud-agents/server, and these tests
replace that module with a factory mock, so the missing export made the
handler throw at call time.
Instead of excluding user-scoped curated integrations from Fast config
resolution, accept user auth tokens at every integration proxy. The
proxy's credential resolution is actor-scoped in both directions: a
deployment-scoped integration uses the org-wide connection, and a
user-scoped integration only ever resolves the connection owned by the
token holder, so a Fast user reaches exactly their own Neon/Supabase/
monday.com connection and nobody else's. Adds proxy regression tests
for both the accepted and default-rejected auth-token paths.
@mrubens
mrubens marked this pull request as ready for review August 24, 2026 21:52
@mrubens
mrubens merged commit e69d74c into develop Aug 24, 2026
17 checks passed
@mrubens
mrubens deleted the feature/fast-custom-automations-2co2bhdlw4oce branch August 24, 2026 21:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant